//
// Created by Ctzzz on 2024/4/24.
//

#include <stdio.h>
#include <sys/stat.h>
#include <malloc.h>

#define BLOCK_SIZE (1024*64) //64K

int main(int argc, char *argv[]) {
    FILE *fp = fopen(argv[1], "w+");
    printf("path1: %s\n", argv[1]);
    if (fp == NULL) {
        printf("open file failed\n");
        return 0;
    }
    FILE *fp2 = fopen(argv[2], "w+");
    printf("path2: %s\n", argv[2]);
    if (fp2 == NULL) {
        printf("open file failed\n");
        return 0;
    }
    // 定义一个结构体变量
    struct stat st = {0};
    // 获取文件信息，stat 是一个用于获取文件或文件夹状态信息的函数，通常在C编程中使用。它可以用于检查文件的存在性、文件类型、文件大小、修改时间等属性。
    stat(argv[1], &st);
    // 获取文件大小
    int size = st.st_size;
    if (size > BLOCK_SIZE) {
        size = BLOCK_SIZE;
    }
    printf("size = %d\n", size);

    // 申请一个缓冲区, calloc 会在内存中分配一个长度为 size 的连续区域，并将这个区域的每一个字节都初始化为 0，最后需要手动释放
    char *buf = calloc(1, size);
    // 设置缓冲区，将缓冲区 buf 与文件流 fp2 关联起来，缓冲区大小为 size
    setvbuf(fp2, buf, _IOFBF, size);

    free(buf);
    fclose(fp);
    fclose(fp2);
    return 0;
}
